package org.example.operator.transform

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

/**
 * rdd的算子，也就是rdd的方法
 *
 * 一个小练习，从文件中读取日志，并得到文件中每个时段点击了多少次
 *
 */
object Spark07_RDD_Operator_Exper {
  def main(args: Array[String]): Unit = {

    val conf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("RDD")
    val context = new SparkContext(conf)

    // 假设一个文件
    val logFile: RDD[String] = context.textFile("log.log")
    // 他的内容格式固定，获得每个时间段的点击次数
    val count: RDD[(String, Iterable[(String, Int)])] = logFile.map(lines => {
      // 由于格式是 dd/MM/yyyy 我们只要dd
      val datas = lines.split(",")
      var time = datas(3)
      // 假设这里获得了格式,返回一个元组，表示有一次
      (time, 1)
    }).groupBy(_._1)//这里按照元素的key进行分组

    // 另一种
    val reduceRdd: RDD[(String, Int)] = logFile.map(lines => {
      // 由于格式是 dd/MM/yyyy 我们只要dd
      val datas = lines.split(",")
      var time = datas(3)
      // 假设这里获得了格式,返回一个元组，表示有一次
      (time, 1)
    }).reduceByKey((x, y) => x + y)

    //然后统计有多少个元素
    count.map(s=>{
      (s._1,s._2.size)
    })

    context.stop();  }
}
